#  面向对象
# 创建学生类
class Student:
    # 类属性 初始值
    name = ""
    age = 0
    # 实例方法
    # self 代表实例对象,当前对象
    def study(self):
        # 打印学习
        print(self.name +"学习")


# 创建学生对象
# 对象的实例化 遍历student1 student2就是两个对象
student1 = Student()
student1.name = "张三"
student1.age = 18

# 创建学生对象
student2 = Student()
student2.name = "李四"
student2.age = 19

# 调用实例方法
student1.study() # 张三学习
student2.study() # 李四学习

# 面向过程的写法
r = 2
# 圆的面积
area = 3.14 * r * r
print(f"r={r}的面积是{area}")
# 圆的周长
# 面向过程的写法
r = 2
# 圆的周长
perimeter = 2 * 3.14 * r
print(f"r={r}的周长是{perimeter}")


# 面向对象的写法
# 优点：  可重用性高，可扩展性高 
class Circle:
    # 属性
    r = 0
    # 方法
    def area(self):
        return 3.14 * self.r * self.r
    
    # 计算圆的周长
    def perimeter(self):
        # 返回圆的周长，公式为2πr
        return 2 * 3.14 * self.r

# 创建圆对象
c = Circle()
c.r = 2
print(f"r={c.r}的面积是{c.area()}")
print(f"r={c.r}的周长是{c.perimeter()}")

# 创建一个狗类
class Dog:
    # 构造函数
    def __init__(self,name,age:int=1): # 初始化函数，用于创建对象
        self.name = name
        # 将传入的name参数赋值给对象的name属性
        self.age = age
        # 将传入的age参数赋值给对象的age属性
        print(f"{self.name}创建成功")

    # 实例方法狗叫
    def bark(self):
        print(f"{self.name}汪汪汪")

    # 类方法
    @classmethod
    def show(cls):
        # 打印当前类名
        print(cls)
        # 打印一条消息，表示这是一个狗类
        print("这是一个狗类")

    # 静态方法
    @staticmethod
    def static_method():
        print("这是一个静态方法")

# 创建狗对象
dog1 = Dog("旺财",2)
dog2 = Dog("大黄",3)
dog1.bark()
dog2.bark()
# 类方法的调用： 实例可以调用，类也可以调用 
dog1.show()
Dog.show()
# 静态方法的调用： 类也可以调用
# 静态方法属于类的不属于对象（实例）
# dog1.static_method()
Dog.static_method()


